<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Articulos_model extends CI_Model {


	public function get_articulos($paginados = true)
	{
		$sql = '';
		//paginacion
		if($paginados)
		{
			$this->load->library('pagination');
			$params = array(
					'result_items_per_page' => '50',
					'result_page' => (isset($_GET['pag'])? $_GET['pag']: 0)
			);
			if($params['result_page'] % $params['result_items_per_page'] == 0)
				$params['result_page'] = ($params['result_page']/$params['result_items_per_page']);
		}
		//Filtros para buscar
		if($this->input->get('fnombre') != '')
			$sql = "WHERE lower(titulo) LIKE '%".mb_strtolower($this->input->get('fnombre'), 'UTF-8')."%'";

		if($this->input->get('fstatus') != '' && $this->input->get('fstatus') != 'todos')
		{
			$sql .= ($sql==''? 'WHERE': ' AND')." status = ".$this->input->get('fstatus');
		}

		if ($this->input->get('ftipo_articulo') != '' && $this->input->get('ftipo_articulo') != 'todos')
		{
			$w = "a.id_tipo = ".$this->input->get('ftipo_articulo')."";
			if ($sql != '')
				$sql .= " AND ".$w;
			else
				$sql .= "WHERE ".$w;
		}

		if ($this->input->get('ffecha_ini') != '')
		{
			$w = "DATE(fecha_creacion) >='".$this->input->get('ffecha_ini')."'".(($this->input->get('ffecha_fin')!='')?" AND DATE(fecha_creacion) <= '".$this->input->get('ffecha_fin')."'":"");
			if ($sql != '')
				$sql .= " AND ".$w;
			else
				$sql .= "WHERE ".$w;
		}

		$query = BDUtil::pagination("
				SELECT id_articulo, numero, titulo, DATE(fecha_creacion) as fecha, status, at.nombre as tipo, sent
				FROM articulos a
				INNER JOIN articulos_tipo at ON at.id_tipo=a.id_tipo
				".$sql."
				ORDER BY numero ASC
				", $params, true);
		$res = $this->db->query($query['query']);

		$response = array(
				'articulos'      => array(),
				'total_rows'     => $query['total_rows'],
				'items_per_page' => $params['result_items_per_page'],
				'result_page'    => $params['result_page']
		);
		if($res->num_rows() > 0)
			$response['articulos'] = $res->result();

		return $response;
	}

	public function agrega_articulo()
	{
		$path_bdd        = 'bdd/';
		$path_breviarios = 'breviarios/';
		$path_capp       = 'cappr/';

		$path_imgs       = 'images/';
		$path_pdf        = 'media/';

		$this->load->library('My_upload', 'upload');
		//$this->load->library('image_lib');

		switch ($_POST['ftipo_articulo']) {
			case 1:
				$path = $path_breviarios;
				break;
			case 2:
				$path = $path_capp;
				break;
			default:
				$path = $path_bdd;
				break;
		}

		// Crea los directorios
		$path_anio = $this->validaDir('anio', $path_pdf, $path);
		$path_mes = $this->validaDir('mes', $path_pdf, $path.$path_anio.'/');

		// Sube el archivo PDF|XLS|XLSX|STATA|SPSS al servidor
		$articulo = $this->upload_file('farchivo', $path_pdf, $path.$path_anio.'/'.$path_mes.'/');
		if (is_array($articulo))
			return $articulo;
		$articulo_muestra = $this->upload_file('farchivo_muestra', $path_pdf, $path.$path_anio.'/'.$path_mes.'/');

		// $aux = TRUE;
		// // Ciclo para subir las imagenes enviadas desde el formulario
		// $imagenes = array();
		// $aux_img_exist = array();
		// for ($i=1; $i < 4; $i++)
		// {
		// 	if ($_FILES['fimagen'.$i]['tmp_name'] != '')
		// 	{
		// 		if ($aux)
		// 		{
		// 			$aux = FALSE;
		// 			$path_anio = $this->validaDir('anio', $path_imgs, $path);
		// 			$path_mes = $this->validaDir('mes', $path_imgs, $path.$path_anio.'/');
		// 		}
		// 		$imagen_res = $this->upload_file('fimagen'.$i, $path_imgs, $path.$path_anio.'/'.$path_mes.'/');
		// 		if (is_array($imagen_res))
		// 			return $imagen_res;
		// 		else
		// 			$imagenes['i'.$i]	= APPPATH.$path_imgs.'articulos/'.$path.$path_anio.'/'.$path_mes.'/'.$imagen_res;

		// 		$aux_img_exist[] = $i;
		// 	}
		// }

		// else
		// {
		// 	$imagenes[]	= APPPATH.$path_imgs.'default.jpg';
		// }
    $imagenes = array();
    for ($i=1; $i < 4; $i++) {
      if (isset($_POST['path_fimagen'.$i]))
      {
        // /opt/lampp/htdocs/tiendacapp/application/images/articulos/bdd/2012/OCTUBRE/9b748e6cdc0b866fb5eafb2e49871d62.jpg
        $aux_path = explode('application/', $_POST['path_fimagen'.$i]);
        $imagenes['i'.$i] = 'application/'.$aux_path[1];
      }
    }

		if (count($imagenes) === 0)
			$imagenes	= array('i1'=>APPPATH.$path_imgs.'default.jpg', 'i2'=>'', 'i3'=>'');
		else
		{
			for ($i=1; $i < 4; $i++) {
				if ( !isset($imagenes['i'.$i]) )
					$imagenes['i'.$i] = '';
			}
		}

		$descripcion = $_POST['fparrafo1'].'<!-- flecha -->'.$_POST['fparrafo2'];
		$data = array(
									'id_tipo'        => $this->input->post('ftipo_articulo'),
									'numero'         => $this->input->post('fnumero'),
									'titulo'         => $this->input->post('ftitulo'),
									'descripcion'    => $descripcion,
									'fecha_creacion' => $this->input->post('ffecha_publicacion'),
									'url_archivo'    => APPPATH.$path_pdf.'articulos/'.$path.$path_anio.'/'.$path_mes.'/'.$articulo,
									'imagen1'        => $imagenes['i1'],
									'imagen2'        => $imagenes['i2'],
									'imagen3'        => $imagenes['i3']
									);

		if ($_POST['ftipo_articulo'] == 1) // breviarios
		{
			$data['materia'] = $this->input->post('fmateria');
		}
		elseif ($_POST['ftipo_articulo'] == 3) // base de datos
		{
			$data['variables']           = $this->input->post('fvariables');
			if($articulo_muestra != '')
				$data['url_archivo_muestra'] = APPPATH.$path_pdf.'articulos/'.$path.$path_anio.'/'.$path_mes.'/'.$articulo_muestra;
		}

    $this->db->insert("articulos", $data);
    $id_articulo = $this->db->insert_id();

    // Envia el articulo por email mediante mailChimp
    $this->load->library('mcapi');
    $type = 'regular';
    $options = array(
                'list_id'    => $this->config->item('mcapi_list_id'),
                'title'      => 'Tienda de Conocimiento Capp1',
                'subject'    => 'Hay nuevo contenido para ti.',
                'from_email' => 'contacto@consultoriacapp.com',
                'from_name'  => 'Tienda de Conocimiento Capp',
                'to_name'    => 'Tienda Capp'
            );

    $data['tipo_articulo'] = $this->db->select('nombre')->from('articulos_tipo')->where('id_tipo', $data['id_tipo'])->get()->row()->nombre;

    $data['header_txt'] = "Hay nuevo contenido para ti";
    $data['content_txt'] = "El día de hoy subimos un nuevo <strong><em>".$data['tipo_articulo']."</em></strong>, el cual se titula “".$data['titulo']."”. A continuación está un resumen del mismo:";

    $html = $this->load->view('panel/articulos/template_email', $data, true);
    $text_plain = "** ".$data['header_txt']."
                  ------------------------------------------------------------
                  ".$data['content_txt']."

                  ".$data['descripcion']."

                  Entra ya a la Tienda Capp y léelo completo. Mantente en contacto con nosotros, te informaremos de nuevo contenido próximamente.

                  Equipo de la Tienda de Conocimiento Capp

                  ============================================================
                  Derechos Reservados © 2012 Tienda de Conocimiento Capp. Todos los derechos reservados

                  Recibiste este correo electrónico porque te registraste en , un espacio que reúne conocimiento exclusivo, útil para académicos, estudiantes, funcionarios públicos, empresarios y activistas sociales. Si crees que es un error, puedes dejar de recibirlos haciendo click aquí.

                  ** Siguenos en Twitter (#)
                  ** Siguenos en Facebook (#)
                  ** www.tiendacapp.com (http://www.tiendacapp.com/)";

    $content = array(
                'html' => $html,
                'text' => $text_plain);

    $idc = $this->mcapi->campaignCreate($type, $options, $content);
    if ($idc)
    {
			// $this->mcapi->campaignSchedule($idc, $data['fecha_creacion'].' 23:00:00'); //$this->mcapi->campaignSendNow($idc);

			$this->mcapi->campaignSendNow($idc);
			$camps = $this->mcapi->campaigns(array('list_id' => $this->config->item('mcapi_list_id'), 'status' => 'sent') );
			if(is_array($camps['data'])){
				foreach ($camps['data'] as $key => $value) {
					$this->mcapi->campaignDelete($value['id']);
				}
			}
			// $this->mcapi->campaignDelete($idc);

      $this->db->update('articulos', array('sent' => '1', 'mc_id_campania' => $idc), array('id_articulo' => $id_articulo));
    }

    // unset($data['tipo_articulo']);
    // unset($data['header_txt']);
    // unset($data['content_txt']);

    $data['ida'] = $id_articulo;
    $this->publica_twitter($data);
    $this->publica_facebook($id_articulo);

		return TRUE;
	}

	public function modificar_articulo($id_articulo=FALSE)
	{

		$id_articulo = (isset($_GET['id']))?$_GET['id']:$id_articulo;
		$path_bdd        = 'bdd/';
		$path_breviarios = 'breviarios/';
		$path_capp       = 'cappr/';

		// $path_imgs       = 'images/';
		$path_pdf        = 'media/';

		$this->load->library('upload');
		//$this->load->library('image_lib');

		$descripcion = $_POST['fparrafo1'].'<!-- flecha -->'.$_POST['fparrafo2'];
		$data = array(
									'id_tipo'        => $this->input->post('ftipo_articulo'),
									'numero'         => $this->input->post('fnumero'),
									'titulo'         => $this->input->post('ftitulo'),
									'fecha_creacion' => $this->input->post('ffecha_publicacion'),
									'descripcion'    => $descripcion
									);

		switch ($_POST['ftipo_articulo']) {
			case 1:
				$path = $path_breviarios;
				break;
			case 2:
				$path = $path_capp;
				break;
			default:
				$path = $path_bdd;
				break;
		}

		if ($_FILES['farchivo']['name'] != '')
		{
			// Crea los directorios
			$path_anio = $this->validaDir('anio', $path_pdf, $path);
			$path_mes = $this->validaDir('mes', $path_pdf, $path.$path_anio.'/');

			// Sube el archivo PDF|XML|STATA|SPSS al servidor
			$articulo = $this->upload_file('farchivo', $path_pdf, $path.$path_anio.'/'.$path_mes.'/');
			if (is_array($articulo))
				return $articulo;
			$data['url_archivo'] = APPPATH.$path_pdf.'articulos/'.$path.$path_anio.'/'.$path_mes.'/'.$articulo;
		}

		if ($_FILES['farchivo_muestra']['name'] != '')
		{
			// Crea los directorios
			$path_anio = $this->validaDir('anio', $path_pdf, $path);
			$path_mes = $this->validaDir('mes', $path_pdf, $path.$path_anio.'/');

			// Sube el archivo PDF|XML|STATA|SPSS al servidor
			$articulo = $this->upload_file('farchivo_muestra', $path_pdf, $path.$path_anio.'/'.$path_mes.'/');
			if (is_array($articulo))
				return $articulo;
			$data['url_archivo_muestra'] = APPPATH.$path_pdf.'articulos/'.$path.$path_anio.'/'.$path_mes.'/'.$articulo;
		}

		// $aux = TRUE;
		// // Ciclo para subir las imagenes enviadas desde el formulario
		// for ($i=1; $i < 4; $i++)
		// {
		// 	if ($_FILES['fimagen'.$i]['tmp_name'] != '')
		// 	{
		// 		if ($aux)
		// 		{
		// 			$aux = FALSE;
		// 			$path_anio = $this->validaDir('anio', $path_imgs, $path);
		// 			$path_mes = $this->validaDir('mes', $path_imgs, $path.$path_anio.'/');
		// 		}
		// 		$imagen_res = $this->upload_file('fimagen'.$i, $path_imgs, $path.$path_anio.'/'.$path_mes.'/');
		// 		if (is_array($imagen_res))
		// 			return $imagen_res;
		// 		else
		// 			$data['imagen'.$i]	= APPPATH.$path_imgs.'articulos/'.$path.$path_anio.'/'.$path_mes.'/'.$imagen_res;
		// 	}
		// }

    // Ciclo para validar que imagenes fueron enviadas desde el formulario
    for ($i=1; $i < 4; $i++)
    {
      if (isset($_POST['path_fimagen'.$i]))
      {
        $aux_path = explode('application/', $_POST['path_fimagen'.$i]);
        $data['imagen'.$i]  = 'application/'.$aux_path[1];
      }
    }

		if ($_POST['ftipo_articulo'] == 1) // breviarios
		{
			$data['materia'] = $this->input->post('fmateria');
		}
		elseif ($_POST['ftipo_articulo'] == 3) // base de datos
		{
			$data['variables'] = $this->input->post('fvariables');
		}

		$this->db->update("articulos", $data, array('id_articulo'=>$id_articulo));

		// // Envia el articulo por email mediante mailChimp
  //   $this->load->library('mcapi');
		// $artc_inf = $this->db->select('mc_id_campania')->from('articulos')->where('id_articulo = '.$id_articulo)->get()->row();
		// if ($artc_inf->mc_id_campania != '') {
		// 	$this->mcapi->campaignUnschedule($artc_inf->mc_id_campania);
		// 	$this->mcapi->campaignSchedule($artc_inf->mc_id_campania, $data['fecha_creacion'].' 23:00:00');
		// }

		return TRUE;
	}

	/*
	 |	Cambia el estatus de articulo a eliminado
	 */
	public function eliminar_articulo($id_articulo=FALSE)
	{
		$id_articulo = (isset($_GET['id']))?$_GET['id']:$id_articulo;
		$this->db->update('articulos', array('status'=>0), array('id_articulo'=>$id_articulo));
		return TRUE;
	}

	/*
	 |	Cambia el estatus de articulo a activo
	 */
	public function activar_articulo($id_articulo=FALSE)
	{
		$id_articulo = (isset($_GET['id']))?$_GET['id']:$id_articulo;
		$this->db->update('articulos', array('status'=>1), array('id_articulo'=>$id_articulo));
		return TRUE;
	}


	/*
	 |	Obtiene la informacion de un articulo
	 */
	public function get_articulo_info($id_articulo=FALSE)
	{
		$id_articulo = (isset($_GET['id']))?$_GET['id']:$id_articulo;

		$sql_res = $this->db->select("*, at.nombre as tipo_articulo, DATE(a.fecha_creacion) as fecha")
												->from("articulos a")
												->join("articulos_tipo at", "at.id_tipo=a.id_tipo", "INNER")
												->where("id_articulo", $id_articulo)
												->get();

		$data['info'] = array();

		if ($sql_res->num_rows() > 0)
		{
			$data['info']	=$sql_res->result();
			$explo = explode('<!-- flecha -->', $data['info'][0]->descripcion);

			$data['info']['desc_bloq1'] = isset($explo[0])?str_replace('<br />', "", $explo[0]):'';
			$data['info']['desc_bloq2'] = isset($explo[1])?str_replace('<br />', "", $explo[1]):'';
		}
		return $data;
	}

	public function get_articulos_tipo()
	{
		$sql_res = $this->db->query("SELECT id_tipo, nombre FROM articulos_tipo ORDER BY nombre ASC");
		$articulos = array();
		if ($sql_res->num_rows() > 0)
		{
			foreach ($sql_res->result() as $key => $tipo)
			{
				$articulos[$tipo->nombre]['articulos'] = $this->db->query("SELECT id_articulo, id_tipo, numero, titulo
																											FROM articulos
																											WHERE status=1 AND id_tipo=".$tipo->id_tipo)->result();

				$articulos[$tipo->nombre]['tipo'] = $tipo->nombre;
			}
		}

		// echo "<pre>";
		//   var_dump($articulos);
		// echo "</pre>";
		return $articulos;
	}

  /**
   * Obtiene el listado de articulos para usar ajax
   */
  public function get_articulos_ajax(){
    $sql = '';
    $res = $this->db->query("
        SELECT id_articulo, titulo
        FROM articulos
        WHERE status=1 AND lower(titulo) LIKE '%".mb_strtolower($this->input->get('term'), 'UTF-8')."%'
        ORDER BY titulo ASC
        LIMIT 20");

    $response = array();
    if($res->num_rows() > 0){
      foreach($res->result() as $itm){
        $response[] = array(
            'id' => $itm->id_articulo,
            'label' => $itm->titulo,
            'value' => $itm->titulo,
            'item' => $itm,
        );
      }
    }

    return $response;
  }

	/*################ AJAX ##################*/
	/*
	 |	Obtiene el siguiente numero de algun tipo de articulo
	 */
  public function ajax_get_siguiente_numero()
  {
  	$tipo_articulo = (isset($_POST['ftipo_articulo']))?$_POST['ftipo_articulo']:3;
  	$sql_res = $this->db->query("SELECT COALESCE(max(numero), 0) + 1 as siguiente
  																FROM articulos
  																WHERE id_tipo=".$tipo_articulo)->row()->siguiente;

  	return $sql_res;
  }


  /*############## UTILIDADES ###############	*/

 	private function mesToString($mes){
		switch(floatval($mes)){
			case 1: return 'ENERO'; break;
			case 2: return 'FEBRERO'; break;
			case 3: return 'MARZO'; break;
			case 4: return 'ABRIL'; break;
			case 5: return 'MAYO'; break;
			case 6: return 'JUNIO'; break;
			case 7: return 'JULIO'; break;
			case 8: return 'AGOSTO'; break;
			case 9: return 'SEPTIEMBRE'; break;
			case 10: return 'OCTUBRE'; break;
			case 11: return 'NOVIEMBRE'; break;
			case 12: return 'DICIEMBRE'; break;
		}
	}

	/**
	 * Valida si el directorio espesificado existe o si no lo crea.
	 */
	public function validaDir($tipo, $dir, $path)
	{
		$path = APPPATH.$dir.'articulos/'.$path;
		if($tipo=='anio'){
			$directorio = date("Y");
		}else{
			$directorio = $this->mesToString(date("n"));
		}
		if(!file_exists($path.$directorio."/")){
			$this->crearFolder($path, $directorio."/");
		}
		return $directorio;
	}

/**
	 * Crea un folder en el servidor.
	 * @param $path_directorio: string. ruta donde se creara el directorio.
	 * @param $nombre_directorio: string. nombre del folder a crear.
	 */
	public function crearFolder($path_directorio, $nombre_directorio)
	{
		if($nombre_directorio != "" && file_exists($path_directorio)){
			if(!file_exists($path_directorio.$nombre_directorio))
				return mkdir($path_directorio.$nombre_directorio, 0777);
			else
				return true;
		}else
			return false;
	}


  /*
  |	Sube un archivo al servidor
  */
  public function upload_file($file_field, $dir, $path)
  {
		$config = array(
			'upload_path' 		=> APPPATH.$dir.'articulos/'.$path,
			'allowed_types' 	=> '*',
			'max_size' 				=> '2048',
			'encrypt_name'		=> FALSE,
			'remove_spaces'   => TRUE
		);

		$this->upload->initialize($config);
		if($this->upload->do_upload($file_field) == FALSE)
		{
			// echo $this->upload->display_errors();
			return array(FALSE, 'msg'=>'Error al intentar subir archivo, intentelo de nuevo.');
		}

		$file_data = $this->upload->data(); //$this->upload->libupload->data();

		if ($file_data['is_image'])
		{
			$resize_res = $this->resize_image($config['upload_path'].$file_data['file_name']);
			if (!$resize_res)
				return array(FALSE, 'msg'=>'Error al intentar redimensionar imagen.');
		}
		return $file_data['file_name'];
	}

	/*
	 |	Redimenciona una imagen
	 */
  public function resize_image($img_path)
  {
  	$config = array('image_library' => 'gd2',
										'source_image'  => $img_path,
										'width'         => '348',
										'height'        => '280',
										'maintain_ratio' => FALSE);

  	$this->image_lib->initialize($config);
  	if (!$this->image_lib->resize())
  	{
  		$this->image_lib->clear();
  		// echo $this->image_lib->display_errors();
			return FALSE;
		}
		$this->image_lib->clear();
		return TRUE;
  }

  public function publica_facebook($id = '')
  {
    $this->load->library('my_facebook');
    $config = array(
          'redirect_uri' => base_url('panel/articulos/facebook/?id='.$id),
          'scope'        => 'email, user_about_me, publish_actions, read_stream, publish_stream, manage_pages',
          'display'      => ''
    );

    $this->my_facebook->initialize($config);
    $access_token = $this->my_facebook->oauth();

    // $page_url          = "https://graph.facebook.com/498302223554811/?fields=access_token&access_token=".$access_token;
    // $page_access_token = json_decode(file_get_contents($page_url));
    $info              = $this->get_articulo_info($id);
    $url_page          = "https://graph.facebook.com/me/feed"; //"https://graph.facebook.com/498302223554811/feed";

    $message = "El día de hoy subimos un nuevo ".$info['info'][0]->tipo_articulo.", el cual se titula “".$info['info'][0]->titulo."”.";
    $data = array(
                'access_token' => $access_token, //$page_access_token->access_token,
                'message'      => $message,
                'link'         => base_url('publico/a/?id='.$id),
                'picture'      => 'http://www.tiendacapp.com/application/images/logo.png',
                'name'         => $info['info'][0]->titulo,
                'caption'      => 'Descripción',
                'description'  => $info['info'][0]->descripcion,
                'properties'   => '',
                'actions'      => json_encode (array('name'=>'Ver mas', 'link'=>'http://www.tiendacapp.com')));

    return $this->my_facebook->post($url_page, $data);
  }

  public function publica_twitter($info)
  {
    $this->load->library('my_twitter');

    $this->my_twitter->set_access_token_app('268932690-JwWhWQrSGT3UQ0Lm60jQprcEcW7sKEkpwldRZ5S7');
    $this->my_twitter->set_access_token_secret_app('HIZk1MIFIgZ5PUGlsjuuXqn0CoYBN40A4Ak8nwkyyM');
    $res = $this->my_twitter->oauth();

    if (strlen($info['titulo']) > 59)
      $info['titulo'] = substr($info['titulo'], 0, 55) . "...";

    // $message = "El día de hoy subimos un nuevo ".$info['tipo_articulo'].", el cual se titula “".$info['titulo']."”.";
    $message = "El día de hoy subimos el artículo “".$info['titulo']."”. Visitalo en " . base_url('publico/a/?id='.$info['ida']);
    return $result = $this->my_twitter->statuses_update($message);
  }

}

/* End of file articulos_model.php */
/* Location: ./application/models/articulos_model.php */
